<?php

require_once('install.php');
require_once('common.php');
require_once('teacher.php');
require_once('student.php');
$t = new Template();
Auth::keep_logged_in();
$db = new DB();

/**
 * A form-ok feldolgozását az "action" POST value szerint különböztetjük meg. 
 */
if(isset($_REQUEST['action'])){
	switch(strtoupper($_REQUEST['action'])){
		case 'LOGIN':
			if($_REQUEST['felhasznalonev'] == "admin"){
				Auth::admin_login($_REQUEST['jelszo'], $t);
			} else {
				Auth::login($_REQUEST['felhasznalonev'], $_REQUEST['jelszo'], $t);
			}
		break;
		case 'LOGOUT':
			Auth::logout();
			Auth::redirect('login');
		break;
		case 'ADMIN_PASSWORD':
			Auth::modify_admin_password($_REQUEST['j1'], $_REQUEST['j1e'], $_REQUEST['j2'], $_REQUEST['j2e'], $t);
			$_REQUEST['view'] = 'admin_password';
			break;
		case 'STUDENT_PASSWORD':
			Auth::modify_user_password($_REQUEST['j1e'], $_REQUEST['j1'], $t);
			$_REQUEST['view'] = 'student_password';			
		break;		
		case 'TEACHER_PASSWORD':
			Auth::modify_user_password($_REQUEST['j1e'], $_REQUEST['j1'], $t);
			$_REQUEST['view'] = 'teacher_password';
		break;
		case 'STUDENT_EXAM_SAVE':
			Student::exam_save($_REQUEST);
		break;
	}
}

$view = strtoupper(isset($_REQUEST['view']) ? $_REQUEST['view'] : 'HOME');  
switch($view){
	default:
	case 'HOME':
	case 'LOGIN':
		$t->set('template', 'login');
		$t->set('title', 'Bejelentkezés'); 
	break;
	case 'ADMIN_PASSWORD':
		$t->set('template', 'admin_password');
		$t->set('title', 'Jelszavak kezelése'); 
	break;
	case 'ADMIN_COURSES':
		$t->set('template', 'kurzusok_oktatok');
		$t->set('title', 'Kurzusok és oktatók kezelése'); 
	break;
	case 'TEACHER_PASSWORD':
		$t->set('template', 'teacher_password');
		$t->set('title', 'Tanár jelszava'); 
	break;
	case 'TEACHER_IMPORT_CSV':
		$t->set('template', 'file_upload');
		$t->set('title', 'Hallgatók importálása CSV fájlból'); 
	break;
	case 'TEACHER_STUDENT_ADMIN':
		$t->set('template', 'hallgatok');
		$t->set('title', 'Hallgatók kezelése'); 
	break;
	case 'TEACHER_EXAMS':
		$t->set('template', 'teacher_exams');
		$t->set('title', 'Vizsgák kezelése'); 
	break;
	case 'TEACHER_EXAMS_SCHEDULE':
		$t->set('template', 'teacher_exams_schedule');
		$t->set('title', 'Vizsga ütemezés'); 
	break;	
	case 'STUDENT_PASSWORD': // Hallgató jelszó módosítás
		$t->set('template', 'student_password');
		$t->set('title', 'Hallgató jelszava'); 
	break;
	case 'STUDENT_CHECKIN': // Jelentkezések kezelése				
		$stmt = $db->query("SELECT * FROM hallgato WHERE felhasznalo_id = " . $_SESSION['felhasznalo']['id']);
		$hallgato = $stmt->fetch_array();
		// Kurzusok listája
		$stmt = $db->query("SELECT * FROM kurzus WHERE kurzus.id IN (SELECT kurzus_id FROM hallgato_kurzus WHERE hallgato_kurzus.hallgato_id = ".$hallgato['id'].") ORDER BY kurzus.nev");
		$kurzusok = array();
		while($kurzus = $stmt->fetch_array()){
			$kurzusok[$kurzus['id']] = $kurzus;
		}
		$t->set('kurzusok', $kurzusok);
		// "Ebben a táblázatban csak azon vizsgák jelennek meg, melyek tartalmaznak 
		// olyan kurzust, melynek a bejelentkezett hallgató hallgatója."
		// A vizsgák a dátumok növekvő időrendi sorrendjében jelennek meg.
		$stmt = $db->query("SELECT * FROM hallgato WHERE felhasznalo_id = " . $_SESSION['felhasznalo']['id']);
		$hallgato = $stmt->fetch_array();
		$stmt = $db->query("
			SELECT vizsga.id AS vizsga_id, vizsga.vizsga_datum, vizsga.cim, tanar.nev AS tanar_nev
			FROM `vizsga` 
			INNER JOIN `tanar` ON `tanar`.`id` = `vizsga`.`letrehozo`
			WHERE vizsga.id IN (
				SELECT vizsga_kurzus.vizsga_id FROM vizsga_kurzus WHERE vizsga_kurzus.kurzus_id IN (
					SELECT hallgato_kurzus.kurzus_id FROM hallgato_kurzus WHERE hallgato_kurzus.hallgato_id = ".$hallgato['id']."
				))
			ORDER BY vizsga.vizsga_datum
		");
		$vizsgak = array();
		while($vizsga = $stmt->fetch_array()){
			$vizsga['time'] = strtotime($vizsga['vizsga_datum']);
			// Mely kurzusokban van ez a vizsga?
			$vizsga_kurzus = array();
			foreach($kurzusok as $kurzus){
				$vizsga_kurzus_stmt = $db->query("SELECT COUNT(*) FROM vizsga_kurzus WHERE vizsga_id = "
					.$vizsga['vizsga_id']." AND kurzus_id = ".$kurzus['id']);
				$vizsga_kurzus_temp = $vizsga_kurzus_stmt->fetch_row();
				$vizsga_kurzus[] = $vizsga_kurzus_temp[0];
			}
			$vizsga['vizsga_kurzus'] = $vizsga_kurzus;
			$vizsgak[] = $vizsga;
		}
		$t->set('vizsgak', $vizsgak);
		$t->set('template', 'student_checkin');
		$t->set('title', 'Jelentkezések kezelése'); 
	break;
	case 'STUDENT_EXAM':		
		// A hallgató adatainak lekérdezése.
		$stmt = $db->query("SELECT * FROM hallgato WHERE felhasznalo_id = " . $_SESSION['felhasznalo']['id']);
		$hallgato = $stmt->fetch_array(); 
		$t->set('hallgato', $hallgato);
		// Melyik vizsgát ütemezi? A vizsga azonosítóját megkaptuk a $_REQUEST["vizsga_id"] -ben.
		$stmt = $db->query("SELECT * FROM vizsga WHERE vizsga.id = " . $_REQUEST["vizsga_id"]);
		$vizsga = $stmt->fetch_array();
		$vizsga['time'] = strtotime($vizsga['vizsga_datum']);
		$t->set('vizsga', $vizsga);
		// Mely kurzusokhoz tartozik ez a vizsga?
		$stmt = $db->query("
				SELECT * FROM kurzus WHERE id IN
				(SELECT kurzus_id FROM vizsga_kurzus WHERE vizsga_id = " . $vizsga["id"] . ")");
		$kurzusok = array();
		while($kurzus = $stmt->fetch_array()){
			$kurzusok[$kurzus["id"]] = $kurzus;
		}		
		// Melyek egy vizsgához tartozó lehetséges vizsgaidőpontok?
		$vizsga_idopontok = Student::vizsga_idopontok($vizsga["id"]);
		$t->set("vizsga_idopontok", $vizsga_idopontok);
		// Azok a kurzusok, melyekre jár a bejelentkezett felhasználó, és tartozik
		// hozzájuk $vizsga["id"] vizsga.
		$stmt = $db->query("
				SELECT * FROM kurzus
				WHERE id IN (SELECT kurzus_id FROM vizsga_kurzus WHERE vizsga_id = " . $vizsga["id"] . ")
				AND id IN (SELECT kurzus_id FROM hallgato_kurzus WHERE hallgato_id = " . $hallgato["id"] . ")
				");
		$sajat_jelentkezesek = array();
		while($kurzus = $stmt->fetch_array()){
			$jelentkezett = Student::jelentkezett($hallgato["id"], $kurzus["id"], $vizsga["id"]);
			$sajat_jelentkezesek[$kurzus["id"]]["hallgato_id"] = $hallgato["id"];
			$sajat_jelentkezesek[$kurzus["id"]]["EHA"] = $hallgato["etr_id"];
			$sajat_jelentkezesek[$kurzus["id"]]["nev"] = $hallgato["nev"];
			$sajat_jelentkezesek[$kurzus["id"]]["kurzus_id"] = $kurzus["id"];
			$sajat_jelentkezesek[$kurzus["id"]]["kurzus_nev"] = $kurzus["nev"];
			$sajat_jelentkezesek[$kurzus["id"]]["jelentkezett"] = $jelentkezett;
			$sajat_jelentkezesek[$kurzus["id"]]["checkboxok"] = $jelentkezett;
			$sajat_jelentkezesek[$kurzus["id"]]["idopont"] = 
				Student::idopont_statuszok($hallgato["id"], $kurzus["id"], $vizsga["id"]);
			
			// A legutóbbi mentés értékeit megjelenítő sor.
			if($jelentkezett) {
				$sajat_jelentkezesek[$kurzus["id"]."2"]["hallgato_id"] = $hallgato["id"];
				$sajat_jelentkezesek[$kurzus["id"]."2"]["EHA"] = $hallgato["etr_id"];
				$sajat_jelentkezesek[$kurzus["id"]."2"]["nev"] = $hallgato["nev"];
				$sajat_jelentkezesek[$kurzus["id"]."2"]["kurzus_id"] = $kurzus["id"];
				$sajat_jelentkezesek[$kurzus["id"]."2"]["kurzus_nev"] = $kurzus["nev"];
				$sajat_jelentkezesek[$kurzus["id"]."2"]["jelentkezett"] = $jelentkezett;				
				$sajat_jelentkezesek[$kurzus["id"]."2"]["checkboxok"] = false;
				$sajat_jelentkezesek[$kurzus["id"]."2"]["idopont"] = 
					Student::idopont_statuszok($hallgato["id"], $kurzus["id"], $vizsga["id"]);
			}			
		}
		$t->set('sajat_jelentkezesek', $sajat_jelentkezesek);
		
		// g. A táblázat következő soraiba azok a hallgatók kerülnek, akik már 
		// ütemezve vannak, az ütemezett időpontok növekvő sorrendjében, továbbá 
		// az is látható, hogy a hallgató ütemezését az oktató véglegesnek tekinti-e vagy nem.	
		$stmt = $db->query("
			SELECT * FROM utemezett WHERE vizsga_id = " . $vizsga["id"] . " AND hallgato_id != ".$hallgato["id"].
			" ORDER BY idopont ");
		$utemezett_jelentkezesek = array();
		while($utemezett = $stmt->fetch_array()){
			if(Student::jelentkezett($utemezett["hallgato_id"], $utemezett["kurzus_id"], $vizsga["id"])) {
				$utemezett_jelentkezesek[$utemezett["kurzus_id"]]["hallgato_id"] = $utemezett["hallgato_id"];
				$hallgato_stmt = $db->query("SELECT * FROM hallgato WHERE id = " . $utemezett["hallgato_id"]);
				$utemezett_hallgato = $hallgato_stmt->fetch_array();			
				$utemezett_jelentkezesek[$utemezett["kurzus_id"]]["EHA"] = $utemezett_hallgato["etr_id"]; 
				$utemezett_jelentkezesek[$utemezett["kurzus_id"]]["nev"] = $utemezett_hallgato["nev"]; 
				$utemezett_jelentkezesek[$utemezett["kurzus_id"]]["kurzus_id"] = $utemezett["kurzus_id"];
				$kurzus_stmt = $db->query("SELECT nev FROM kurzus WHERE id = " . $utemezett["kurzus_id"]);
				$utemezett_kurzus = $kurzus_stmt->fetch_array();
				$utemezett_jelentkezesek[$utemezett["kurzus_id"]]["kurzus_nev"] = $utemezett_kurzus["nev"]; 
				$utemezett_jelentkezesek[$utemezett["kurzus_id"]]["utemezett_idopont"] = $utemezett["idopont"];
				$utemezett_jelentkezesek[$utemezett["kurzus_id"]]["utemezett_vegleges"] = $utemezett["vegleges"];
				$utemezett_jelentkezesek[$utemezett["kurzus_id"]]["idopont"] = 
					Student::idopont_statuszok($utemezett["hallgato_id"], $utemezett["kurzus_id"], $vizsga["id"]);
			}
		}
		$t->set('utemezett_jelentkezesek', $utemezett_jelentkezesek);
		
		// h. Ezek után következnek azok a hallgatók, névsor szerint rendezve, akik 
		// ütemezhetők, de még nem lettek ütemezve. 
		$stmt = $db->query("
			SELECT * FROM hallgato WHERE id != " . $hallgato["id"]  . " ORDER BY nev
		");
		$i = 0;
		$jelentkezesek = array();
		while($hallgato_row = $stmt->fetch_array()){
			$kurzus_stmt = $db->query("
				SELECT kurzus.id, kurzus.nev 
				FROM kurzus 
					INNER JOIN vizsga_kurzus ON kurzus.id = vizsga_kurzus.kurzus_id
					INNER JOIN hallgato_kurzus ON hallgato_kurzus.kurzus_id = kurzus.id 
				WHERE vizsga_kurzus.vizsga_id = ".$_REQUEST["vizsga_id"]."
					AND hallgato_kurzus.hallgato_id = ".$hallgato_row['id']."
					AND kurzus.id NOT IN 
						(SELECT kurzus_id FROM utemezett 
						WHERE hallgato_id = ".$hallgato_row['id']." 
						AND vizsga_id = ".$_REQUEST["vizsga_id"].")
				ORDER BY kurzus.nev ");	
			while($kurzus = $kurzus_stmt->fetch_array()) {
				if(Student::jelentkezett($hallgato_row["id"], $kurzus["id"], $_REQUEST["vizsga_id"])) {
					if(utemezheto($kurzus["id"], $hallgato_row["id"])){
						$jelentkezesek[$i]["hallgato_id"] = $hallgato_row["id"];
						$hallgato_stmt = $db->query("SELECT * FROM hallgato WHERE id = " . $hallgato_row["id"]);
						$utemezheto_hallgato = $hallgato_stmt->fetch_array();
						$jelentkezesek[$i]["EHA"] = $utemezheto_hallgato["etr_id"];
						$jelentkezesek[$i]["nev"] = $utemezheto_hallgato["nev"];
						$jelentkezesek[$i]["kurzus_id"] = $kurzus["id"];					
						$jelentkezesek[$i]["kurzus_nev"] = $kurzus["nev"];						
						$jelentkezesek[$i]["idopont"] = Student::idopont_statuszok($hallgato_row["id"], $kurzus["id"], $_REQUEST["vizsga_id"]);
						$i++;
					}
				}
			}
			$t->set('utemezheto_jelentkezesek', $jelentkezesek);
		}
		
		// i. Végül következnek azok a hallgatók, névsor szerint rendezve, akik 
		// nem ütemezhetők, de már jelezték preferenciáikat. Egy hallgato akkor és 
		// csakis akkor ütemezhető vizsgára egy adott kurzusból, ha a kurzust oktató 
		// minden oktató ütemezhetőnek minősítette.
		// __nem ütemezett és nem ütemezhető__
		$stmt = $db->query("
			SELECT * FROM hallgato WHERE id != " . $hallgato["id"]  . " ORDER BY nev
		");
		$i = 0;
		$jelentkezesek = array();
		while($hallgato_row = $stmt->fetch_array()){
			$kurzus_stmt = $db->query("
				SELECT kurzus.id, kurzus.nev 
				FROM kurzus JOIN vizsga_kurzus ON kurzus.id = vizsga_kurzus.kurzus_id
				WHERE vizsga_kurzus.vizsga_id = ".$_REQUEST["vizsga_id"]." 
					AND kurzus.id NOT IN 
						(SELECT kurzus_id FROM utemezett 
						WHERE hallgato_id = ".$hallgato_row['id']." 
						AND vizsga_id = ".$_REQUEST["vizsga_id"].")
					/* jelezték preferenciáikat  */
					AND kurzus.id IN 
						(SELECT kurzus_id FROM hallgato_nemszeretne 
						WHERE hallgato_id = ".$hallgato_row['id']." AND vizsga_id = ".$_REQUEST["vizsga_id"].")
				ORDER BY kurzus.nev ");	
			while($kurzus = $kurzus_stmt->fetch_array()) {
				if(Student::jelentkezett($hallgato_row["id"], $kurzus["id"], $_REQUEST["vizsga_id"])) {
					if(!utemezheto($kurzus["id"], $hallgato_row["id"])){
						$jelentkezesek[$i]["hallgato_id"] = $hallgato_row["id"];
						$hallgato_stmt = $db->query("SELECT * FROM hallgato WHERE id = " . $hallgato_row["id"]);
						$utemezheto_hallgato = $hallgato_stmt->fetch_array();
						$jelentkezesek[$i]["EHA"] = $utemezheto_hallgato["etr_id"];
						$jelentkezesek[$i]["nev"] = $utemezheto_hallgato["nev"];
						$jelentkezesek[$i]["kurzus_id"] = $kurzus["id"];					
						$jelentkezesek[$i]["kurzus_nev"] = $kurzus["nev"];						
						$jelentkezesek[$i]["idopont"] = Student::idopont_statuszok($hallgato_row["id"], $kurzus["id"], $_REQUEST["vizsga_id"]);
						$i++;
					}
				}
			}
			$t->set('nem_utemezheto_jelentkezesek', $jelentkezesek);
		}
		
		// k. Ha a vizsga létrehozója úgy rendelkezett, hogy a hallgatók ne lássák egymás ütemezését, akkor a táblázat csak a bejelentkezett hallgatóhoz tartozó sorokat tartalmazza. Jelen esetben ez csak az első 4 Kemény Janira vonatkozó sor lenne.
		$t->set('vizsga_nyilvanos', $vizsga["vizsga_nyilvanos"] == 1);
		// l. Ha a vizsga létrehozója úgy rendelkezett, hogy a hallgatók láthatják egymás ütemezését, de az EHA kódok nem nyilvánosak, akkor az EHA kódok oszlop nem jelenik meg.
		$t->set('eha_nyilvanos', $vizsga["eha_nyilvanos"] == 1);		
		// m. Ha a vizsga létrehozója úgy rendelkezett, hogy a hallgatók láthatják egymás ütemezését, de ne legyen látható az, hogy a preferenciát leadott hallgatók közül ki az aki még nem ütemezhető, akkor minden hallgató ütemezhetőként jelenik meg, viszont a jelmagyarázatnál a "nincs jel = nincs ütemezve vagy nem ütemezhető" felirat jelenik meg.
		$t->set('utemezheto_nyilvanos', $vizsga["utemezheto_nyilvanos"] == 1);
		
		$t->set('template', 'student_exam');
		$t->set('title', 'Jelentkezések kezelése'); 
	break;	
}

//Megjeleníti a templatet az eddig beállított tulajdonságokkal.
$t->display();
